package com.heima.freemarker.controller;

import com.heima.freemarker.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * @author Xiao
 * @version 1.0
 * @description
 * @date 2021/11/21
 */
@Controller //注意：这里不能使用RestController，因为不是用json进行数据传递，而是传递一个视图
public class HelloController {
    /**
     * 入门案例
     * @param model
     * @return
     */
    @GetMapping("/basic")
    public String test(Model model) {
        //1.纯文本形式的参数
        model.addAttribute("name", "freemarker");
        System.err.println("name:freemarker");
        //2.实体类相关的参数
        Student student = new Student();
        student.setName("阿良");
        student.setAge(18);
        model.addAttribute("stu", student);
        System.err.println(student);
        return "freemarkerDemo";
    }

    /**
     * 集合指令 --> List和Map
     * 判断指令 --> if
     * 判断某变量是否存在 --> <#if stus ??></#if>
     * 缺失变量 --> ${(stu.bestFriend)!'阿良'}
     * @param model
     * @return
     */
    @GetMapping("/list")
    public String list(Model model) {
        //------------------------------------
        //对象模型数据
        Student stu1 = new Student();
        stu1.setName("小强");
        stu1.setAge(18);
        stu1.setMoney(100.86f);
        stu1.setBirthday(new Date());
        Student stu2 = new Student();
        stu2.setName("小红");
        stu2.setMoney(200.1f);
        stu2.setAge(19);
        //将两个对象模型数据存放到List集合中
        List<Student> stus = new ArrayList<>();
        stus.add(stu1);
        stus.add(stu2);
        //向model中存放List集合数据
        model.addAttribute("stus", stus);
        //------------------------------------
        //创建Map数据
        HashMap<String, Student> stuMap = new HashMap<>();
        stuMap.put("stu1", stu1);
        stuMap.put("stu2", stu2);
        // 3.1 向model中存放Map数据
        model.addAttribute("stuMap", stuMap);
        return "list_Map_If";
    }

    /**
     * 运算符 --> 算术运算符、比较运算符、逻辑运算符
     * @param model
     * @return
     */
    @GetMapping("/operation")
    public String testOperation(Model model) {
        //构建 Date 数据
        Date now = new Date();
        model.addAttribute("date1", now);
        model.addAttribute("date2", now);
        return "operation";
    }

    /**
     * 內建函数 --> 变量+?+函数名称
     * 某个集合的大小 --> ${集合名?size}
     * 日期格式化 --> ${today?date} ${today?time} ${today?datetime} ${today?string("yyyy年MM月")}
     * 内建函数c --> model.addAttribute("point", 102920122) --> ${point?c}
     * 将json字符串转成对象 -->
     *      <#assign text="{'bank':'工商银行','account':'10101920201920212'}" />
     *      <#assign data=text?eval />
     *      开户行：${data.bank}  账号：${data.account}
     * @param model
     * @return
     */
    @GetMapping("/innerFunc")
    public String testInnerFunc(Model model) {
        //1.1 小强对象模型数据
        Student stu1 = new Student();
        stu1.setName("小强");
        stu1.setAge(18);
        stu1.setMoney(1000.86f);
        stu1.setBirthday(new Date());
        //1.2 小红对象模型数据
        Student stu2 = new Student();
        stu2.setName("小红");
        stu2.setMoney(200.1f);
        stu2.setAge(19);
        //1.3 将两个对象模型数据存放到List集合中
        List<Student> stus = new ArrayList<>();
        stus.add(stu1);
        stus.add(stu2);
        model.addAttribute("stus", stus);
        // 2.1 添加日期
        Date date = new Date();
        model.addAttribute("today", date);
        // 3.1 添加数值
        model.addAttribute("point", 102920122);
        return "innerFunc";
    }
}
